home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Aminet
/
gfx
/
show
/
MerlinGfx.lha
/
bitmap.h
< prev
next >
Wrap
C/C++ Source or Header
|
1995-06-07
|
8KB
|
192 lines
/***********************************************************/
/* _ __ __ */
/* /_//_)/_ ( */
/* / //( (_/__)|/STEM written by H.Raaf © 1992-93 */
/* / */
/* ProDev / X-Pert */
/* */
/***********************************************************/
/* */
/* Definitions for the HRBitMap V38 */
/* */
/***********************************************************/
#ifndef HRG_BITMAP_H
#define HRG_BITMAP_H
#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif
#ifndef EXEC_SEMAPHORES_H
#include <exec/semaphores.h>
#endif
/*
** Color Look Up Table Definition, wird fuer die GAMMA Korrektur
** bei hrWriteRect() und andere Funktionen mit GAMMA Faehigkeit, anstelle
** der Stukture HRColorMap() verwendet! Bitte beachten das der Aufbau sich
** stark von einer HRColorMap unterscheidet (aus Geschwindikeitsgruenden
** ist es guenstiger die RGB(A) Werte nicht als ULONGs sondern in 4
** Array's zu haben (Spart viel Rechenzeit pro Pixel). Eine CLUT ist immer
** fuer alle 256 Farben pro Farbanteil definiert (siehe HRGRender.library).
*/
struct HRCLUT
{
UBYTE R[256];
UBYTE G[256];
UBYTE B[256];
UBYTE A[256];
};
struct HRBitMap
{
union LOCKTYPE
{
struct SignalSemaphore BLock; /* Die Signal Semaphore, welche vor Auslager Problemen schuetzt...*/
struct HRBitMap *LinkBMap;
} LockType; /* Damit wird die BitMap Struktur (und der durch sie belegte Speicher
** vor einer Veraenderung waehrend des Auslagerns geschuetzt.) */
UWORD BytesPerRow; /* Anzahl der Bytes um von einem Pixel, den naechsten Pixel eine Zeile
** tiefer zu erreichen (Width aus HRScreen kann kleiner sein!) */
UWORD Rows; /* Anzahl der Zeilen */
UWORD BitMapType; /* Art des Hardware-Farbmodus der BitMap */
UBYTE BitMapFlags; /* Diese Flags geben Auskunft ueber die Art der BitMap */
UBYTE PixelModulo; /* Bits um von einem Pixel zum naechsten zu gelangen:
** (PixelModulo/8) = BytePerPixel in der Zeile (kann Bruchteil sein!)
** Breite in Pixel = (BytesPerRow/PixelModulo)*8 (geht immer)
**
** PLANE : 1 (auf planes achten) (Nicht bei Merlin!)
** PACKED : 1,2,4,8 (Domino nur 8)
** MIXED : 4 (auf Byte Packed BitPlane Data achten,
** da dieser Modus ganz SPEZIELL arbeitet)
** XGA : 16 (R:5 G:6 B:5) (Nicht bei Domino)
** TARGA : 16 (R:5 G:5 B:5)
** RGB24 : 24 (R:8 G:8 B:8) (Nicht bei Domino) */
UBYTE *MemPtr[8]; /* Maximal 8 (Plane) Pointer
**
** PLANE : 0 oder 0-3 : wie Amiga BitPlanes (Nur Domino)
** PACKED : 0-7 (Je nach BitsPerPixel / sind aber alle gleich ;)
** MIXED : 0-3 (Zeigen jeweils auf x Plane Byte)
** XGA : 0 (1 Alpha Channel Daten 8 Bit)
** TARGA : 0 (1 Alpha Channel Daten 8 Bit)
** RGB24 : 0 (1 Alpha Channel Daten 8 Bit) */
UBYTE *BaseMem; /* Hier steht die Auslager Adresse fuer den Screen
** Wenn diese nicht gesetzt ist, so gilt die BitMap
** als nicht verlagerbar und je nach Flags ist sie
** im Kartenspeicher oder halt nicht (USE WITH CARE!) */
ULONG ByteSize; /* Number of Bytes in this BitMap */
union
{
struct HRColorMap *ColorMap; /* Points to hrh->ColorMap in Palette Modi */
struct HRCLUT *CLUT;
} ColCLUT;
UBYTE *BankAddress; /* PRIVATE! Adresse des ersten Bytes in der naechsten Bank */
UBYTE RenderFlags; /* Aus diesen Bits berechnet sich die RenderFunc.. */
UBYTE Bank; /* PRIVATE! Aktual BANK (Bit 0 for ZorroII 4MB/2 Banking) */
UWORD BankedLine; /* PRIVATE! Zeile in der gebankt werden muss */
UWORD BankedByte; /* PRIVATE! Offset des Bytes bei dem gebankt werden muss */
UWORD WordReserved; /* PRIVATE! */
};
#define BLock LockType.BLock
#define LinkBitMap LockType.LinkMap
#define LinkLock LockType.LinkMap->BLock
/* Definitionen fuer HRBitMap Type */
/* Bits Per Pixel in der BitMap (und Depth bei Planes)
**
** PLANE : 1 und 4 (Nicht bei Merlin!)
** PACKED : 1-8 (Domino nur 8)
** MIXED : 4 (Byte Packed BitPlane Data)
** XGA : 16 (R:5 G:6 B:5) (Nicht bei Domino)
** TARGA : 15 (R:5 G:5 B:5)
** RGB24 : 24 (R:8 G:8 B:8) (Nicht bei Domino)
*/
#define HRBM_MODEMASK 0xFF00
#define HRBM_BITMASK 0x00FF
#define HRBM_PLANE 0 /* Nicht bei Merlin */
#define HRBM_PACKED 1
#define HRBM_MIXED 2
#define HRBM_XGA 3 /* Nicht bei Domino */
#define HRBM_TARGA 4
#define HRBM_RGB24 5 /* Nicht bei Domino */
#define HRBM_RGBOVL 6 /* z.Z. nicht implementiert */
#define HRCOL_PLANE4 (HRBM_PLANE<<8|4) /* Nicht bei Merlin */
#define HRCOL_MIXED4 (HRBM_MIXED<<8|4)
#define HRCOL_PACKED1 (HRBM_PACKED<<8|1) /* z.Z. nicht implementiert */
#define HRCOL_PACKED2 (HRBM_PACKED<<8|2) /* z.Z. nicht implementiert */
#define HRCOL_PACKED4 (HRBM_PACKED<<8|4) /* z.Z. nicht implementiert */
#define HRCOL_PACKED8 (HRBM_PACKED<<8|8)
#define HRCOL_TARGA (HRBM_TARGA<<8|15)
#define HRCOL_XGA (HRBM_XGA<<8|16) /* Nicht bei Domino */
#define HRCOL_RGB24 (HRBM_RGB24<<8|24) /* Nicht bei Domino */
#define HRCOL_RGBOVL (HRBM_RGBOVL<<8|32) /* z.Z. nicht implementiert */
/* This Definitions are not fully Clear... but nice ;) */
#define HRCOL_16Col HRCOL_PLANE4 /* Obsolete */
#define HRCOL_256Col HRCOL_PACKED8 /* Obsolete */
#define HRCOL_HiCol HRCOL_TARGA /* Obsolete */
/* This Definitions for advanced BitMap prozessing */
#define HRBRF_ALL 0xFF
#define HRBRB_DITHER 0 /* Dither Modus aktive, wird nur bei TARGA, XGA
** und PACKED8 unterstuetzt. */
#define HRBRB_USERGBA 1 /* Wenn dieses Flags gesetzt ist, wird bei PACKED8
** ein Farbwert fuer die HRGRenderLibrary als 24 Bit
** Wert interpretiert
** Bei den Funktionen, welche RGBA DATEN erwarten,
** bewirkt dieses Flag, das die SOURCE Daten als
** RGBA (ULONG) Daten erwartet werden (spez. fuer
** hrWriteRect() einzusetzten (HRBRB_QUICKRGBA) */
#define HRBRB_USECLUT 2 /* Wenn dieses Flags gesetzt ist, wird bei Palettenlosen
** Modi der Eintrag aus hrbm->CLUT bzw. hrbm->ColorMap
** als Pseudo-Palette benutzt (HRBRB_USECMAP).
** Bei Funktionen, welche RGBA DATEN erwarten, wird
** bei gesetztem Flags eine ColorLookUp Table (z.B.
** fuer GAMMA Korrektur) benutzt */
#define HRBRB_BANKED 3 /* Flag, welches gebankte BitMaps kennzeichnet !! */
#define HRBRF_DITHER (1<<HRBRB_DITHER)
#define HRBRF_USERGBA (1<<HRBRB_USERGBA)
#define HRBRF_USECLUT (1<<HRBRB_USECLUT)
#define HRBRF_BANKED (1<<HRBRB_BANKED)
/* Defines fuer doppelt benutzte Flags */
#define HRBRB_QUICKRGBA HRBRB_USERGBA
#define HRBRF_QUICKRGBA HRBRF_USERGBA
#define HRBRB_USECMAP HRBRB_USECLUT
#define HRBRF_USECMAP HRBRF_USECLUT
/* Definitionen fuer HRBitMap : Flags */
#define HRBFF_ALL 0xFF
#define HRBFB_LINKMAP 0 /* Diese BitMap ist an eine andere BitMap gelinked */
/* Bei solchen BitMaps ist der BLock keine Signal-Semaphore,
** sondern ein Zeiger auf die "Grund" BitMap. */
#define HRBFB_BLITABLE 1 /* Bitmap ist BLITBAR */
#define HRBFB_ACCABLE 2 /* Bitmap kann Hardware-Masken benutzen */
#define HRBFB_FAKEMAP 3 /* Bitmap ist NIEMALS SICHTBAR */
#define HRBFF_LINKMAP (1<<HRBFB_LINKMAP)
#define HRBFF_BLITABLE (1<<HRBFB_BLITABLE)
#define HRBFF_ACCABLE (1<<HRBFB_ACCABLE)
#define HRBFF_FAKEMAP (1<<HRBFB_FAKEMAP)
#endif